//sessionStorage
export const session = function(key, value) {
  if (value === void 0) {
    var lsVal = sessionStorage.getItem(key);
    if (lsVal && lsVal.indexOf("autostringify-") === 0) {
      return JSON.parse(lsVal.split("autostringify-")[1]);
    } else {
      return lsVal;
    }
  } else {
    if (typeof value === "object" || Array.isArray(value)) {
      value = "autostringify-" + JSON.stringify(value);
    }
    return sessionStorage.setItem(key, value);
  }
};

export const urlPar = function(name) {
  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  var r = window.location.search.substr(1).match(reg);
  if (r != null) return unescape(r[2]);
  return null;
};
const vcity = {
  11: "北京",
  12: "天津",
  13: "河北",
  14: "山西",
  15: "内蒙古",
  21: "辽宁",
  22: "吉林",
  23: "黑龙江",
  31: "上海",
  32: "江苏",
  33: "浙江",
  34: "安徽",
  35: "福建",
  36: "江西",
  37: "山东",
  41: "河南",
  42: "湖北",
  43: "湖南",
  44: "广东",
  45: "广西",
  46: "海南",
  50: "重庆",
  51: "四川",
  52: "贵州",
  53: "云南",
  54: "西藏",
  61: "陕西",
  62: "甘肃",
  63: "青海",
  64: "宁夏",
  65: "新疆",
  71: "台湾",
  81: "香港",
  82: "澳门",
  91: "国外"
};
const checkCard = function(obj) {
  //校验长度，类型
  if (isCardNo(obj) === false) {
    return false;
  }
  //检查省份
  if (checkProvince(obj) === false) {
    return false;
  }
  //校验生日
  if (checkBirthday(obj) === false) {
    return false;
  }
  //检验位的检测
  if (checkParity(obj) === false) {
    return false;
  }
  return true;
};
//检查号码是否符合规范，包括长度，类型
const isCardNo = function(obj) {
  //身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X
  var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
  if (reg.test(obj) === false) {
    return false;
  }
  return true;
};
//取身份证前两位,校验省份
const checkProvince = function(obj) {
  var province = obj.substr(0, 2);
  if (vcity[province] == undefined) {
    return false;
  }
  return true;
};
//检查生日是否正确
const checkBirthday = function(obj) {
  var len = obj.length;
  //身份证15位时，次序为省（3位）市（3位）年（2位）月（2位）日（2位）校验位（3位），皆为数字
  if (len == "15") {
    var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
    var arr_data = obj.match(re_fifteen);
    var year = arr_data[2];
    var month = arr_data[3];
    var day = arr_data[4];
    var birthday = new Date("19" + year + "/" + month + "/" + day);
    return verifyBirthday("19" + year, month, day, birthday);
  }
  //身份证18位时，次序为省（3位）市（3位）年（4位）月（2位）日（2位）校验位（4位），校验位末尾可能为X
  if (len == "18") {
    var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
    var arr_data = obj.match(re_eighteen);
    var year = arr_data[2];
    var month = arr_data[3];
    var day = arr_data[4];
    var birthday = new Date(year + "/" + month + "/" + day);
    return verifyBirthday(year, month, day, birthday);
  }
  return false;
};
//校验日期
const verifyBirthday = function(year, month, day, birthday) {
  var now = new Date();
  var now_year = now.getFullYear();
  //年月日是否合理
  if (
    birthday.getFullYear() == year &&
    birthday.getMonth() + 1 == month &&
    birthday.getDate() == day
  ) {
    //判断年份的范围（3岁到100岁之间)
    var time = now_year - year;
    if (time >= 0 && time <= 130) {
      return true;
    }
    return false;
  }
  return false;
};
//校验位的检测
const checkParity = function(obj) {
  //15位转18位
  obj = changeFivteenToEighteen(obj);
  var len = obj.length;
  if (len == "18") {
    var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    var arrCh = new Array(
      "1",
      "0",
      "X",
      "9",
      "8",
      "7",
      "6",
      "5",
      "4",
      "3",
      "2"
    );
    var cardTemp = 0,
      i,
      valnum;
    for (i = 0; i < 17; i++) {
      cardTemp += obj.substr(i, 1) * arrInt[i];
    }
    valnum = arrCh[cardTemp % 11];
    if (valnum == obj.substr(17, 1)) {
      return true;
    }
    return false;
  }
  return false;
};
//15位转18位身份证号
const changeFivteenToEighteen = function(obj) {
  if (obj.length == "15") {
    var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    var arrCh = new Array(
      "1",
      "0",
      "X",
      "9",
      "8",
      "7",
      "6",
      "5",
      "4",
      "3",
      "2"
    );
    var cardTemp = 0,
      i;
    obj = obj.substr(0, 6) + "19" + obj.substr(6, obj.length - 6);
    for (i = 0; i < 17; i++) {
      cardTemp += obj.substr(i, 1) * arrInt[i];
    }
    obj += arrCh[cardTemp % 11];
    return obj;
  }
  return obj;
};
// 数据校验工具
export const checkData = {
  // 校验手机号
  // 检验身份号
  // 检验地址
  // 检验邮箱
  checkMail: function(mail) {
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (filter.test(mail)) {
      return {
        statu: true,
        msg: "检验成功"
      };
    } else {
      return {
        statu: false,
        msg: "请输入合法的邮箱"
      };
    }
  },
  //校验手机号
  checkPhone: function(phone) {
    var filter = /^1[3|4|5|7|8]\d{9}$/;
    if (filter.test(phone)) {
      return {
        statu: true,
        msg: "检验成功"
      };
    } else {
      return {
        statu: false,
        msg: "请输入合法的手机号"
      };
    }
  },
  // 校验身份证
  isScCard: function(scCard) {
    if (!checkCard(scCard)) {
      return {
        statu: false,
        msg: "请输入合法身份证号码"
      };
    } else {
      return {
        statu: true,
        msg: "检验成功"
      };
    }
  },
  // 校验数字
  isNumber: function(val) {
    if (typeof val === "number" && isFinite(val)) {
      return {
        statu: true,
        msg: "校验成功"
      };
    } else {
      return {
        statu: false,
        msg: "输入不合法"
      };
    }
  },
  // 校验混合字符串
  checkMixture: function(nubmer) {
    //console.log(number);
    var filter = /^[0-9a-zA-Z]*$/;
    //判断字符串是否为数字和字母组合
    if (!filter.test(nubmer)) {
      return {
        statu: false,
        msg: "输入不合法"
      };
    } else {
      return {
        statu: true,
        msg: "校验成功"
      };
    }
  },
  // 用户名校验
  checkUserName: function(userName) {
    var filter = /^[0-9A-Za-z]{1,20}$/;
    if (!filter.test(userName)) {
      return {
        statu: false,
        msg: "用户名格式不正确，长度在1-20之间"
      };
    } else {
      return {
        statu: true,
        msg: "校验成功"
      };
    }
  },
  // 密码校验
  checkPassword: function(password) {
    //console.log(password);
    var filter = /^[a-zA-Z0-9]{6,20}$/;
    if (!filter.test(password)) {
      return {
        statu: false,
        msg: "密码格式不正确，不能出现特殊字符，长度在6-20之间"
      };
    } else {
      return {
        statu: true,
        msg: "校验成功"
      };
    }
  },
  // 校验数据是否为空
  isStringNull: function(string, name) {
    if (string == "" || string == null) {
      return {
        statu: false,
        msg: name + "不能为空"
      };
    }else{
      return {
        statu: true,
        msg: '校验成功'
      };
    }
  }
};
